import hashlib , os , datetime
from tools import config
from Crypto.PublicKey import RSA

def bt_密码生成(self):
    passwd = config.str1
    salt = config.str2
    if not passwd or not salt:
        self.ui.print_echo.append('请在变量1中设置密码,变量2中设置盐值')
    else:
        self.ui.print_echo.append('已设置密码为:{},盐值为:{}'.format(passwd,salt))
        p1=passwd + '_bt.cn'
        p2=hashlib.md5(p1.encode(encoding='UTF-8')).hexdigest()+salt
        btpass=hashlib.md5(p2.encode(encoding='UTF-8')).hexdigest()
        self.ui.print_echo.append('bt加盐密码为:{}'.format(btpass))
    config.清理目录(self)

def pyc_反编译(self):
    config.文件读取(self)
    if not config.file_name:
        self.ui.print_echo.append('文件读取失败,请检查是否输入需要反编译的文件')
    else:
        self.ui.print_echo.append('文件读取正常，正在准备反编译')
        try:
            os.system(f"uncompyle6 {config.file_name} > {config.文件目录}/pyc_py.py" )
            self.ui.print_echo.append(f'反编译完成，请查看{config.文件目录}/pyc_py.py')    
        except:
            self.ui.print_echo.append('反编译失败')
    config.清理目录(self)

def 时间戳转换(self):
    时间戳 = int(self.ui.input_echo.toPlainText())
    if not 时间戳:
        self.ui.print_echo.append('请输入时间戳')
        raise
    try:
        if len(str(时间戳)) == 9:  # ios 时间戳
            self.ui.print_echo.append(f"ios时间: {datetime.datetime.fromtimestamp(时间戳+978307200, datetime.timezone.utc)}")
        elif len(str(时间戳)) == 13: # 毫秒级时间戳
            时间戳 = 时间戳//1000
        elif len(str(时间戳)) == 18: # ios 时间戳
            时间戳 = int(str(时间戳)[:9]) +978307200
        if len(str(时间戳)) == 10: # 秒级时间戳
            self.ui.print_echo.append(f"UTC+0时间: {datetime.datetime.fromtimestamp(时间戳, datetime.timezone.utc)}")
            self.ui.print_echo.append(f"UTC+8时间: {datetime.datetime.fromtimestamp(时间戳, datetime.timezone(datetime.timedelta(hours=8)))}")
    except Exception as e:
        self.ui.print_echo.append(f"时间戳格式错误:{e}")

def RSA公钥分解(self):
    file = config.文件读取(self)
    if not config.file_name:
        self.ui.print_echo.append('文件读取失败,请拖拽文件到输入框')
    else:
        rsa_key = RSA.import_key(file)  # 导入公钥
        self.ui.print_echo.append(f'n: {rsa_key.n}\ne: {rsa_key.e}')
    return rsa_key.n, rsa_key.e # 返回模数和指数